/**
 * Creates new Airpodder.ui.ChannelGrid
 * @constructor
 * @param {Object} config A config object
 */
Airpodder.ui.ChannelGrid = Ext.extend(Ext.grid.GridPanel, {
  initComponent:function() {
    var config = {
      store             : Airpodder.data.channels,
      enableColumnMove  : false,
      stripeRows        : true,
      autoScroll        : true,
      hideHeaders       : true,
      columns           : [
        {header: "id",          sortable: false, width: 20,   dataIndex: 'id',          hidden: true},
        {header: "image",       sortable: false, width: 42,   dataIndex: 'image',       hidden: false, renderer: function (val) {return '<img src="' + (0 < val.length ? air.File.applicationStorageDirectory.resolvePath("images/" + val).url : Ext.BLANK_IMAGE_URL) + '" alt="" style="width: 32px; height: 32px;" />';}},
        {header: "Title",       sortable: false, width: 180,  dataIndex: 'title',       id: 'title',   renderer: function (val, x, store) {return '<b>' + val + '</b><br />' + store.data.description}},
        {header: "description", sortable: false, width: 180,  dataIndex: 'description', hidden: true}
      ],
      autoExpandColumn  : 'title',
      sm                : new Ext.grid.RowSelectionModel({
        singleSelect: true
      }),
      bbar              : [{
        text    : 'Check for Updates',
        iconCls : 'x-refresh-icon',
        handler : function() {alert(1);}
      }]
    };
    this.addEvents(
      {"channelselected" : true}
    ); 
    Ext.apply(this, Ext.apply(this.initialConfig, config));
    Airpodder.ui.ChannelGrid.superclass.initComponent.apply(this, arguments);
    
    this.on('rowcontextmenu', this.onRowContextMenu, this);
  }
  /**
   * Отображаем контекстное меню в гриде с подкастами.
   * @param Grid            grid
   * @param Number          rowindex
   * @param Ext.EventObject e
   */
  , onRowContextMenu : function(grid, index, e){
    e.stopEvent();
    var xy = e.getXY();

    if (!this.rowContextMenu) {
      this.rowContextMenu = new Ext.menu.Menu({
        items : [{
          text    : 'Update channel',
          scope   : this,
          iconCls : 'x-refresh-icon'
        }, {
          text    : 'Browse site',
          scope   : this,
          iconCls : 'x-internet-icon',
          handler : this.openChannelSite
        }, '-', {
          text    : 'Edit channel',
          scope   : this,
          iconCls : 'x-edit-icon'
        }, {
          text    : 'Delete channel',
          scope   : this,
          iconCls : 'x-delete-icon'
        }]
      });
      this.rowContextMenu.on('hide', this.onRowContextMenuHide, this);
    }

    this.selModel.selectRow(index);

    if (this.ctxRow) {
      Ext.fly(this.ctxRow).removeClass('x-node-ctx');
      this.ctxRow = null;
    }
    this.ctxRow     = this.view.getRow(index);
    this.ctxRecord  = this.store.getAt(index);
    Ext.fly(this.ctxRow).addClass('x-node-ctx');
    this.rowContextMenu.showAt(xy);
  }

  /**
   * Скрытие контекстного меню. Очищаем переменные, чтобы они не занимали память
   */
  , onRowContextMenuHide : function(){
    if (this.ctxRow) {
      Ext.fly(this.ctxRow).removeClass('x-node-ctx');
      this.ctxRow = null;
    }
  }

  /**
   * Открывает домашнюю страницу подкаста в дефолтном браузере
   */  
  , openChannelSite: function() {
    var dt      = this.ctxRecord.data,
        request = new air.URLRequest(dt.link);
    air.navigateToURL(request, "_blank");
  }
  
  , onRender:function() {
    this.store.load();
    Airpodder.ui.ChannelGrid.superclass.onRender.apply(this, arguments);
  }
});
 
Ext.reg('channelgrid', Airpodder.ui.ChannelGrid); 
